package com.example.coursehub.controller;

import com.example.coursehub.dto.UserUpdateDto;
import com.example.coursehub.entity.*;
import com.example.coursehub.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 用户注册
     * @param user 要注册的用户对象
     * @return 注册成功后的用户对象
     */
    @PostMapping("/register")
    public ResponseEntity<?> registerUser(@RequestBody User user) {
        User registeredUser = userService.registerUser(user);
        if(registeredUser == null){
            return ResponseEntity.status(HttpStatus.CONFLICT).body("用户已存在");
        }
        return ResponseEntity.ok(registeredUser);
    }

    /**
     * 更新用户信息
     *
     * @param userId 用户ID
     * @param updateDto 更新数据
     * @return 更新后的用户对象或错误信息
     */
    @PutMapping("/{userId}")
    public ResponseEntity<?> updateUser(
            @PathVariable String userId,
            @RequestBody UserUpdateDto updateDto) {

        try {
            User updatedUser = userService.updateUserInfo(userId, updateDto);
            return ResponseEntity.ok(updatedUser);
        } catch (IllegalArgumentException e) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
        } catch (RuntimeException e) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
        }
    }

    /**
     * 根据用户ID删除一个用户
     * @param userId 要删除的用户的ID
     */
    @DeleteMapping("/{userId}")
    public void deleteUser(@PathVariable String userId) {
        userService.deleteUser(userId);
    }

    /**
     * 根据用户ID获取一个用户
     * @param userId 要获取的用户的ID
     * @return 获取到的用户对象
     */
    @GetMapping("/{userId}")
    public User getUserById(@PathVariable String userId) {
        return userService.getUserById(userId);
    }

    /**
     * 检查用户密码是否正确
     * @param userId 用户ID（路径变量）
     * @param password 要检查的密码（请求参数）
     * @return 密码是否正确的布尔值
     */
    @GetMapping("/checkPassword/user/{userId}")
    public boolean checkUserPassword(
            @PathVariable("userId") String userId,
            @RequestParam("password") String password) {
        System.out.println("Received userId: " + userId);
        System.out.println("Received password: " + password);
        return userService.checkUserPassword(userId, password);
    }

    /**
     * 获取所有用户
     * @return 所有用户的列表
     */
    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    /**
     * 用户登录
     * @param account 用户账号
     * @param password 用户密码
     * @return 登录成功后的用户对象
     */
    @PostMapping("/login")
    public User login(@RequestParam String account, @RequestParam String password) {
        return userService.login(account, password);
    }

    /**
     * 用户注销登录
     */
    @PostMapping("/logout")
    public void logout() {
        userService.logout();
    }

    @GetMapping("/role")
    public String getUserRoleInCourse(
            @RequestParam String courseId,
            @RequestParam String userId) {

        return userService.getUserRoleInCourse(courseId, userId);
    }
}